<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <base target="_blank"/>
    <title>JS函数</title>

    <script>
        //定义函数
        function test() {
            console.debug("hello");
            console.debug("js");
        }

        //调用
        test();

        // arguments对象-->类似于数组是个伪数组,用于函数的参数不定
        function testArgu() {
            alert(arguments[1])
        }

        // testArgu(12, 33, 23)

        //函数声明方式2
        //把函数赋值给变量就是一个函数表达式，后面的函数没有名称就是匿名函数
        var fun1 = function () {
            console.debug('函数表达式')
        };
        //变量名就是函数名称，直接调用
        fun1();

        //函数自调用--->没有名称，声明后直接调用
        (function () {
            console.debug("函数自调用");
        }());

        //函数也是一种数据类型：function类型
        console.debug("函数的类型是：" + typeof fun1)

        //函数也可以当做参数使用，被称为回调函数
        function testCallback(fn) {
            console.debug('回调函数开始调用...');
            fn();
        }

        function callback() {
            console.debug("我是回调函数");
        }

        //testCallback(callback())

        //函数可以当做返回值使用
        function testReturn() {
            console.debug("测试函数当做返回值")
            return function () {
                console.debug("我是函数的函数值也是一个函数")
            };
        }

        var returnFunction = testReturn();
        //调用函数返回的函数
        returnFunction();

    </script>
</head>
<body>


</body>

</html>